package com.ruoyi.web3jutil;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.stream.Collectors;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.Bool;
import org.web3j.abi.datatypes.DynamicArray;
import org.web3j.abi.datatypes.DynamicStruct;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.StaticStruct;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.Utf8String;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.abi.datatypes.generated.Uint8;
import org.web3j.abi.datatypes.reflection.Parameterized;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.RemoteCall;
import org.web3j.protocol.core.RemoteFunctionCall;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.tuples.generated.Tuple2;
import org.web3j.tuples.generated.Tuple5;
import org.web3j.tuples.generated.Tuple6;
import org.web3j.tx.Contract;
import org.web3j.tx.TransactionManager;
import org.web3j.tx.gas.ContractGasProvider;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/LFDT-web3j/web3j/tree/main/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version 1.7.0.
 */
@SuppressWarnings("rawtypes")
public class Qingongjianxue extends Contract {
    public static final String BINARY = "6080604052348015600e575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614b798061005b5f395ff3fe608060405260043610610180575f3560e01c80634b31bf3e116100d057806394ee84d211610089578063a6c807a911610063578063a6c807a9146105d0578063d3fa1d6214610610578063e9523c9714610638578063e9e309271461066257610180565b806394ee84d214610542578063965a79fb1461057e578063a1c0d32f146105a857610180565b80634b31bf3e1461042257806350355d761461044a57806361df2a8d146104745780637df221e9146104b05780638da5cb5b146104f05780638fc9654e1461051a57610180565b8063180aedf31161013d57806320c4c1e81161011757806320c4c1e8146103795780632ad6ee43146103955780633b417cd6146103bd578063429b62e5146103e557610180565b8063180aedf3146102d057806319351839146103115780631c03abb71461033957610180565b806304f801a0146101845780630be435bd146101c05780630c33c5221461020057806311117fc81461024157806312a0b7441461027e57806314c671d6146102a6575b5f80fd5b34801561018f575f80fd5b506101aa60048036038101906101a5919061307d565b61068c565b6040516101b7919061318f565b60405180910390f35b3480156101cb575f80fd5b506101e660048036038101906101e191906131d9565b61072b565b6040516101f79594939291906132c7565b60405180910390f35b34801561020b575f80fd5b506102266004803603810190610221919061307d565b61081a565b60405161023896959493929190613392565b60405180910390f35b34801561024c575f80fd5b506102676004803603810190610262919061307d565b610912565b6040516102759291906133f8565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f919061354b565b610968565b005b3480156102b1575f80fd5b506102ba610ca6565b6040516102c79190613748565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061307d565b610e26565b60405161030896959493929190613392565b60405180910390f35b34801561031c575f80fd5b5061033760048036038101906103329190613792565b610f0f565b005b348015610344575f80fd5b5061035f600480360381019061035a919061307d565b6110c3565b6040516103709594939291906132c7565b60405180910390f35b610393600480360381019061038e919061307d565b6111c1565b005b3480156103a0575f80fd5b506103bb60048036038101906103b6919061307d565b61149d565b005b3480156103c8575f80fd5b506103e360048036038101906103de91906137d0565b611624565b005b3480156103f0575f80fd5b5061040b600480360381019061040691906131d9565b61191b565b6040516104199291906133f8565b60405180910390f35b34801561042d575f80fd5b50610448600480360381019061044391906138db565b611966565b005b348015610455575f80fd5b5061045e611b8d565b60405161046b9190613935565b60405180910390f35b34801561047f575f80fd5b5061049a600480360381019061049591906131d9565b611b93565b6040516104a791906139f6565b60405180910390f35b3480156104bb575f80fd5b506104d660048036038101906104d1919061307d565b611c29565b6040516104e7959493929190613a16565b60405180910390f35b3480156104fb575f80fd5b50610504611d1b565b6040516105119190613a6e565b60405180910390f35b348015610525575f80fd5b50610540600480360381019061053b9190613792565b611d3e565b005b34801561054d575f80fd5b506105686004803603810190610563919061307d565b61205f565b604051610575919061318f565b60405180910390f35b348015610589575f80fd5b506105926120fe565b60405161059f9190613c78565b60405180910390f35b3480156105b3575f80fd5b506105ce60048036038101906105c9919061307d565b6123ad565b005b3480156105db575f80fd5b506105f660048036038101906105f191906131d9565b612720565b604051610607959493929190613a16565b60405180910390f35b34801561061b575f80fd5b5061063660048036038101906106319190613c98565b612803565b005b348015610643575f80fd5b5061064c612c24565b6040516106599190613dd9565b60405180910390f35b34801561066d575f80fd5b50610676612cec565b6040516106839190613fad565b60405180910390f35b606060045f8381526020019081526020015f2060060180548060200260200160405190810160405280929190818152602001828054801561071f57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116106d6575b50505050509050919050565b6002602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461076f90613ffa565b80601f016020809104026020016040519081016040528092919081815260200182805461079b90613ffa565b80156107e65780601f106107bd576101008083540402835291602001916107e6565b820191905f5260205f20905b8154815290600101906020018083116107c957829003601f168201915b505050505090806002015f9054906101000a900460ff1690806003015490806004015f9054906101000a900460ff16905085565b60088181548110610829575f80fd5b905f5260205f2090600802015f91509050805f01549080600101805461084e90613ffa565b80601f016020809104026020016040519081016040528092919081815260200182805461087a90613ffa565b80156108c55780601f1061089c576101008083540402835291602001916108c5565b820191905f5260205f20905b8154815290600101906020018083116108a857829003601f168201915b505050505090806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015f9054906101000a900460ff16905086565b60078181548110610921575f80fd5b905f5260205f20015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690805f0160149054906101000a900460ff16905082565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003015f9054906101000a900460ff16156109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec90614074565b60405180910390fd5b6040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020016001151581526020015f81526020015f67ffffffffffffffff811115610a5157610a50613427565b5b604051908082528060200260200182016040528015610a7f5781602001602082028036833780820191505090505b5081525060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081610b19919061422f565b50604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a0820151816005019080519060200190610b69929190612eb0565b50905050600560015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20908060018154018082558091505060019003905f5260205f2090600602015f909190919091505f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019081610c499190614313565b5060028201548160020155600382015f9054906101000a900460ff16816003015f6101000a81548160ff021916908315150217905550600482015481600401556005820181600501908054610c9f929190612efb565b5050505050565b60606006805480602002602001604051908101604052809291908181526020015f905b82821015610e1d578382905f5260205f2090600502016040518060a00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610d4e90613ffa565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7a90613ffa565b8015610dc55780601f10610d9c57610100808354040283529160200191610dc5565b820191905f5260205f20905b815481529060010190602001808311610da857829003601f168201915b50505050508152602001600282015f9054906101000a900460ff1660ff1660ff16815260200160038201548152602001600482015f9054906101000a900460ff16151515158152505081526020019060010190610cc9565b50505050905090565b6004602052805f5260405f205f91509050805f015490806001018054610e4b90613ffa565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7790613ffa565b8015610ec25780601f10610e9957610100808354040283529160200191610ec2565b820191905f5260205f20905b815481529060010190602001808311610ea557829003601f168201915b505050505090806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015f9054906101000a900460ff16905086565b5f73ffffffffffffffffffffffffffffffffffffffff1660035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290614442565b60405180910390fd5b60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206004015f9054906101000a900460ff16611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e906144aa565b60405180910390fd5b8060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f6101000a81548160ff021916908360ff1602179055505050565b600681815481106110d2575f80fd5b905f5260205f2090600502015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461111690613ffa565b80601f016020809104026020016040519081016040528092919081815260200182805461114290613ffa565b801561118d5780601f106111645761010080835404028352916020019161118d565b820191905f5260205f20905b81548152906001019060200180831161117057829003601f168201915b505050505090806002015f9054906101000a900460ff1690806003015490806004015f9054906101000a900460ff16905085565b60045f8281526020019081526020015f206002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990614512565b60405180910390fd5b6002808111156112755761127461331f565b5b60045f8381526020019081526020015f206005015f9054906101000a900460ff1660028111156112a8576112a761331f565b5b146112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df9061457a565b60405180910390fd5b5f60045f8381526020019081526020015f206007018054905060045f8481526020019081526020015f206003015461132091906145c5565b905080341015611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90614650565b60405180910390fd5b5f60045f8481526020019081526020015f206003015490505f5b60045f8581526020019081526020015f2060070180549050811015611497575f60045f8681526020019081526020015f2060070182815481106113c5576113c461466e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015611432573d5f803e3d5ffd5b508260015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206004015f828254611482919061469b565b9250508190555050808060010191505061137f565b50505050565b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003015f9054906101000a900460ff16611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090614718565b60405180910390fd5b5f600281111561153c5761153b61331f565b5b60045f8381526020019081526020015f206005015f9054906101000a900460ff16600281111561156f5761156e61331f565b5b146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690614780565b60405180910390fd5b60045f8281526020019081526020015f2060060133908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206004015f9054906101000a900460ff16156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a8906147e8565b60405180910390fd5b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001606460ff1681526020015f81526020016001151581525060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101908161178b919061422f565b506040820151816002015f6101000a81548160ff021916908360ff160217905550606082015181600301556080820151816004015f6101000a81548160ff021916908315150217905550905050600660025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20908060018154018082558091505060019003905f5260205f2090600502015f909190919091505f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182018160010190816118b49190614313565b50600282015f9054906101000a900460ff16816002015f6101000a81548160ff021916908360ff16021790555060038201548160030155600482015f9054906101000a900460ff16816004015f6101000a81548160ff021916908315150217905550505050565b6003602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690805f0160149054906101000a900460ff16905082565b60045f8381526020019081526020015f206002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fe90614850565b60405180910390fd5b5f6002811115611a1a57611a1961331f565b5b60045f8481526020019081526020015f206005015f9054906101000a900460ff166002811115611a4d57611a4c61331f565b5b14611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906148b8565b60405180910390fd5b8060045f8481526020019081526020015f206007019080519060200190611ab5929190612f49565b50600160045f8481526020019081526020015f206005015f6101000a81548160ff02191690836002811115611aed57611aec61331f565b5b02179055505f5b8151811015611b885760015f838381518110611b1357611b1261466e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060050183908060018154018082558091505060019003905f5260205f20015f90919091909150558080600101915050611af4565b505050565b60095481565b606060015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600501805480602002602001604051908101604052809291908181526020018280548015611c1d57602002820191905f5260205f20905b815481526020019060010190808311611c09575b50505050509050919050565b60058181548110611c38575f80fd5b905f5260205f2090600602015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054611c7c90613ffa565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca890613ffa565b8015611cf35780601f10611cca57610100808354040283529160200191611cf3565b820191905f5260205f20905b815481529060010190602001808311611cd657829003601f168201915b505050505090806002015490806003015f9054906101000a900460ff16908060040154905085565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290614920565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e90614988565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1681525060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a81548160ff021916908360ff160217905550905050600760035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20908060018154018082558091505060019003905f5260205f20015f909190919091505f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f820160149054906101000a900460ff16815f0160146101000a81548160ff021916908360ff16021790555050505050565b606060045f8381526020019081526020015f206007018054806020026020016040519081016040528092919081815260200182805480156120f257602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116120a9575b50505050509050919050565b60606008805480602002602001604051908101604052809291908181526020015f905b828210156123a4578382905f5260205f209060080201604051806101000160405290815f820154815260200160018201805461215c90613ffa565b80601f016020809104026020016040519081016040528092919081815260200182805461218890613ffa565b80156121d35780601f106121aa576101008083540402835291602001916121d3565b820191905f5260205f20905b8154815290600101906020018083116121b657829003601f168201915b50505050508152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815260200160048201548152602001600582015f9054906101000a900460ff1660028111156122695761226861331f565b5b600281111561227b5761227a61331f565b5b81526020016006820180548060200260200160405190810160405280929190818152602001828054801561230157602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116122b8575b505050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561238c57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612343575b50505050508152505081526020019060010190612121565b50505050905090565b60045f8281526020019081526020015f206002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806124a457505f73ffffffffffffffffffffffffffffffffffffffff1660035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b6124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614a16565b60405180910390fd5b600160028111156124f7576124f661331f565b5b60045f8381526020019081526020015f206005015f9054906101000a900460ff16600281111561252a5761252961331f565b5b1461256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256190614a7e565b60405180910390fd5b600260045f8381526020019081526020015f206005015f6101000a81548160ff021916908360028111156125a1576125a061331f565b5b02179055505f5b60045f8381526020019081526020015f206007018054905081101561271c575f60045f8481526020019081526020015f2060070182815481106125ee576125ed61466e565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060050190505f5b818054905081101561270c578482828154811061267d5761267c61466e565b5b905f5260205f200154036126ff57816001838054905061269d9190614a9c565b815481106126ae576126ad61466e565b5b905f5260205f2001548282815481106126ca576126c961466e565b5b905f5260205f200181905550818054806126e7576126e6614acf565b5b600190038181905f5260205f20015f9055905561270c565b808060010191505061265d565b50505080806001019150506125a8565b5050565b6001602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461276490613ffa565b80601f016020809104026020016040519081016040528092919081815260200182805461279090613ffa565b80156127db5780601f106127b2576101008083540402835291602001916127db565b820191905f5260205f20905b8154815290600101906020018083116127be57829003601f168201915b505050505090806002015490806003015f9054906101000a900460ff16908060040154905085565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206004015f9054906101000a900460ff1661288f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612886906144aa565b60405180910390fd5b5f60095f8154809291906128a290614afc565b9190505590506040518061010001604052808281526020018581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020015f60028111156128fb576128fa61331f565b5b81526020015f67ffffffffffffffff81111561291a57612919613427565b5b6040519080825280602002602001820160405280156129485781602001602082028036833780820191505090505b5081526020015f67ffffffffffffffff81111561296857612967613427565b5b6040519080825280602002602001820160405280156129965781602001602082028036833780820191505090505b5081525060045f8381526020019081526020015f205f820151815f015560208201518160010190816129c8919061422f565b506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015f6101000a81548160ff02191690836002811115612a4d57612a4c61331f565b5b021790555060c0820151816006019080519060200190612a6e929190612f49565b5060e0820151816007019080519060200190612a8b929190612f49565b50905050600860045f8381526020019081526020015f20908060018154018082558091505060019003905f5260205f2090600802015f909190919091505f820154815f015560018201816001019081612ae49190614313565b50600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003820154816003015560048201548160040155600582015f9054906101000a900460ff16816005015f6101000a81548160ff02191690836002811115612b9457612b9361331f565b5b02179055506006820181600601908054612baf929190612fd0565b506007820181600701908054612bc6929190612fd0565b50505060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003015f815480929190612c1990614afc565b919050555050505050565b60606007805480602002602001604051908101604052809291908181526020015f905b82821015612ce3578382905f5260205f20016040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900460ff1660ff1660ff168152505081526020019060010190612c47565b50505050905090565b60606005805480602002602001604051908101604052809291908181526020015f905b82821015612ea7578382905f5260205f2090600602016040518060c00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054612d9490613ffa565b80601f0160208091040260200160405190810160405280929190818152602001828054612dc090613ffa565b8015612e0b5780601f10612de257610100808354040283529160200191612e0b565b820191905f5260205f20905b815481529060010190602001808311612dee57829003601f168201915b5050505050815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016004820154815260200160058201805480602002602001604051908101604052809291908181526020018280548015612e8f57602002820191905f5260205f20905b815481526020019060010190808311612e7b575b50505050508152505081526020019060010190612d0f565b50505050905090565b828054828255905f5260205f20908101928215612eea579160200282015b82811115612ee9578251825591602001919060010190612ece565b5b509050612ef7919061301e565b5090565b828054828255905f5260205f20908101928215612f38575f5260205f209182015b82811115612f37578254825591600101919060010190612f1c565b5b509050612f45919061301e565b5090565b828054828255905f5260205f20908101928215612fbf579160200282015b82811115612fbe578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612f67565b5b509050612fcc919061301e565b5090565b828054828255905f5260205f2090810192821561300d575f5260205f209182015b8281111561300c578254825591600101919060010190612ff1565b5b50905061301a919061301e565b5090565b5b80821115613035575f815f90555060010161301f565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61305c8161304a565b8114613066575f80fd5b50565b5f8135905061307781613053565b92915050565b5f6020828403121561309257613091613042565b5b5f61309f84828501613069565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6130fa826130d1565b9050919050565b61310a816130f0565b82525050565b5f61311b8383613101565b60208301905092915050565b5f602082019050919050565b5f61313d826130a8565b61314781856130b2565b9350613152836130c2565b805f5b838110156131825781516131698882613110565b975061317483613127565b925050600181019050613155565b5085935050505092915050565b5f6020820190508181035f8301526131a78184613133565b905092915050565b6131b8816130f0565b81146131c2575f80fd5b50565b5f813590506131d3816131af565b92915050565b5f602082840312156131ee576131ed613042565b5b5f6131fb848285016131c5565b91505092915050565b61320d816130f0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61325582613213565b61325f818561321d565b935061326f81856020860161322d565b6132788161323b565b840191505092915050565b5f60ff82169050919050565b61329881613283565b82525050565b6132a78161304a565b82525050565b5f8115159050919050565b6132c1816132ad565b82525050565b5f60a0820190506132da5f830188613204565b81810360208301526132ec818761324b565b90506132fb604083018661328f565b613308606083018561329e565b61331560808301846132b8565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6003811061335d5761335c61331f565b5b50565b5f81905061336d8261334c565b919050565b5f61337c82613360565b9050919050565b61338c81613372565b82525050565b5f60c0820190506133a55f83018961329e565b81810360208301526133b7818861324b565b90506133c66040830187613204565b6133d3606083018661329e565b6133e0608083018561329e565b6133ed60a0830184613383565b979650505050505050565b5f60408201905061340b5f830185613204565b613418602083018461328f565b9392505050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61345d8261323b565b810181811067ffffffffffffffff8211171561347c5761347b613427565b5b80604052505050565b5f61348e613039565b905061349a8282613454565b919050565b5f67ffffffffffffffff8211156134b9576134b8613427565b5b6134c28261323b565b9050602081019050919050565b828183375f83830152505050565b5f6134ef6134ea8461349f565b613485565b90508281526020810184848401111561350b5761350a613423565b5b6135168482856134cf565b509392505050565b5f82601f8301126135325761353161341f565b5b81356135428482602086016134dd565b91505092915050565b5f806040838503121561356157613560613042565b5b5f83013567ffffffffffffffff81111561357e5761357d613046565b5b61358a8582860161351e565b925050602061359b85828601613069565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6135e882613213565b6135f281856135ce565b935061360281856020860161322d565b61360b8161323b565b840191505092915050565b61361f81613283565b82525050565b61362e8161304a565b82525050565b61363d816132ad565b82525050565b5f60a083015f8301516136585f860182613101565b506020830151848203602086015261367082826135de565b91505060408301516136856040860182613616565b5060608301516136986060860182613625565b5060808301516136ab6080860182613634565b508091505092915050565b5f6136c18383613643565b905092915050565b5f602082019050919050565b5f6136df826135a5565b6136e981856135af565b9350836020820285016136fb856135bf565b805f5b85811015613736578484038952815161371785826136b6565b9450613722836136c9565b925060208a019950506001810190506136fe565b50829750879550505050505092915050565b5f6020820190508181035f83015261376081846136d5565b905092915050565b61377181613283565b811461377b575f80fd5b50565b5f8135905061378c81613768565b92915050565b5f80604083850312156137a8576137a7613042565b5b5f6137b5858286016131c5565b92505060206137c68582860161377e565b9150509250929050565b5f602082840312156137e5576137e4613042565b5b5f82013567ffffffffffffffff81111561380257613801613046565b5b61380e8482850161351e565b91505092915050565b5f67ffffffffffffffff82111561383157613830613427565b5b602082029050602081019050919050565b5f80fd5b5f61385861385384613817565b613485565b9050808382526020820190506020840283018581111561387b5761387a613842565b5b835b818110156138a4578061389088826131c5565b84526020840193505060208101905061387d565b5050509392505050565b5f82601f8301126138c2576138c161341f565b5b81356138d2848260208601613846565b91505092915050565b5f80604083850312156138f1576138f0613042565b5b5f6138fe85828601613069565b925050602083013567ffffffffffffffff81111561391f5761391e613046565b5b61392b858286016138ae565b9150509250929050565b5f6020820190506139485f83018461329e565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6139828383613625565b60208301905092915050565b5f602082019050919050565b5f6139a48261394e565b6139ae8185613958565b93506139b983613968565b805f5b838110156139e95781516139d08882613977565b97506139db8361398e565b9250506001810190506139bc565b5085935050505092915050565b5f6020820190508181035f830152613a0e818461399a565b905092915050565b5f60a082019050613a295f830188613204565b8181036020830152613a3b818761324b565b9050613a4a604083018661329e565b613a5760608301856132b8565b613a64608083018461329e565b9695505050505050565b5f602082019050613a815f830184613204565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613ab981613372565b82525050565b5f82825260208201905092915050565b5f613ad9826130a8565b613ae38185613abf565b9350613aee836130c2565b805f5b83811015613b1e578151613b058882613110565b9750613b1083613127565b925050600181019050613af1565b5085935050505092915050565b5f61010083015f830151613b415f860182613625565b5060208301518482036020860152613b5982826135de565b9150506040830151613b6e6040860182613101565b506060830151613b816060860182613625565b506080830151613b946080860182613625565b5060a0830151613ba760a0860182613ab0565b5060c083015184820360c0860152613bbf8282613acf565b91505060e083015184820360e0860152613bd98282613acf565b9150508091505092915050565b5f613bf18383613b2b565b905092915050565b5f602082019050919050565b5f613c0f82613a87565b613c198185613a91565b935083602082028501613c2b85613aa1565b805f5b85811015613c665784840389528151613c478582613be6565b9450613c5283613bf9565b925060208a01995050600181019050613c2e565b50829750879550505050505092915050565b5f6020820190508181035f830152613c908184613c05565b905092915050565b5f805f60608486031215613caf57613cae613042565b5b5f84013567ffffffffffffffff811115613ccc57613ccb613046565b5b613cd88682870161351e565b9350506020613ce986828701613069565b9250506040613cfa86828701613069565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b604082015f820151613d415f850182613101565b506020820151613d546020850182613616565b50505050565b5f613d658383613d2d565b60408301905092915050565b5f602082019050919050565b5f613d8782613d04565b613d918185613d0e565b9350613d9c83613d1e565b805f5b83811015613dcc578151613db38882613d5a565b9750613dbe83613d71565b925050600181019050613d9f565b5085935050505092915050565b5f6020820190508181035f830152613df18184613d7d565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f613e3c8261394e565b613e468185613e22565b9350613e5183613968565b805f5b83811015613e81578151613e688882613977565b9750613e738361398e565b925050600181019050613e54565b5085935050505092915050565b5f60c083015f830151613ea35f860182613101565b5060208301518482036020860152613ebb82826135de565b9150506040830151613ed06040860182613625565b506060830151613ee36060860182613634565b506080830151613ef66080860182613625565b5060a083015184820360a0860152613f0e8282613e32565b9150508091505092915050565b5f613f268383613e8e565b905092915050565b5f602082019050919050565b5f613f4482613df9565b613f4e8185613e03565b935083602082028501613f6085613e13565b805f5b85811015613f9b5784840389528151613f7c8582613f1b565b9450613f8783613f2e565b925060208a01995050600181019050613f63565b50829750879550505050505092915050565b5f6020820190508181035f830152613fc58184613f3a565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061401157607f821691505b60208210810361402457614023613fcd565b5b50919050565b7f53747564656e7420616c726561647920726567697374657265640000000000005f82015250565b5f61405e601a8361321d565b91506140698261402a565b602082019050919050565b5f6020820190508181035f83015261408b81614052565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026140ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826140b3565b6140f886836140b3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61413361412e6141298461304a565b614110565b61304a565b9050919050565b5f819050919050565b61414c83614119565b6141606141588261413a565b8484546140bf565b825550505050565b5f90565b614174614168565b61417f818484614143565b505050565b5b818110156141a2576141975f8261416c565b600181019050614185565b5050565b601f8211156141e7576141b881614092565b6141c1846140a4565b810160208510156141d0578190505b6141e46141dc856140a4565b830182614184565b50505b505050565b5f82821c905092915050565b5f6142075f19846008026141ec565b1980831691505092915050565b5f61421f83836141f8565b9150826002028217905092915050565b61423882613213565b67ffffffffffffffff81111561425157614250613427565b5b61425b8254613ffa565b6142668282856141a6565b5f60209050601f831160018114614297575f8415614285578287015190505b61428f8582614214565b8655506142f6565b601f1984166142a586614092565b5f5b828110156142cc578489015182556001820191506020850194506020810190506142a7565b868310156142e957848901516142e5601f8916826141f8565b8355505b6001600288020188555050505b505050505050565b5f8154905061430c81613ffa565b9050919050565b8181036143215750506143f6565b61432a826142fe565b67ffffffffffffffff81111561434357614342613427565b5b61434d8254613ffa565b6143588282856141a6565b5f601f831160018114614385575f8415614373578287015490505b61437d8582614214565b8655506143ef565b601f19841661439387614092565b965061439e86614092565b5f5b828110156143c5578489015482556001820191506001850194506020810190506143a0565b868310156143e257848901546143de601f8916826141f8565b8355505b6001600288020188555050505b5050505050505b565b7f4f6e6c792061646d696e2063616e2061646a7573742072657075746174696f6e5f82015250565b5f61442c60208361321d565b9150614437826143f8565b602082019050919050565b5f6020820190508181035f83015261445981614420565b9050919050565b7f456d706c6f796572206e6f7420726567697374657265640000000000000000005f82015250565b5f61449460178361321d565b915061449f82614460565b602082019050919050565b5f6020820190508181035f8301526144c181614488565b9050919050565b7f4f6e6c79206a6f6220706f737465722063616e207061790000000000000000005f82015250565b5f6144fc60178361321d565b9150614507826144c8565b602082019050919050565b5f6020820190508181035f830152614529816144f0565b9050919050565b7f4a6f62206e6f7420636f6d706c657465640000000000000000000000000000005f82015250565b5f61456460118361321d565b915061456f82614530565b602082019050919050565b5f6020820190508181035f83015261459181614558565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6145cf8261304a565b91506145da8361304a565b92508282026145e88161304a565b915082820484148315176145ff576145fe614598565b5b5092915050565b7f496e73756666696369656e74207061796d656e740000000000000000000000005f82015250565b5f61463a60148361321d565b915061464582614606565b602082019050919050565b5f6020820190508181035f8301526146678161462e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6146a58261304a565b91506146b08361304a565b92508282019050808211156146c8576146c7614598565b5b92915050565b7f53747564656e74206e6f742072656769737465726564000000000000000000005f82015250565b5f61470260168361321d565b915061470d826146ce565b602082019050919050565b5f6020820190508181035f83015261472f816146f6565b9050919050565b7f4a6f62206e6f7420617661696c61626c650000000000000000000000000000005f82015250565b5f61476a60118361321d565b915061477582614736565b602082019050919050565b5f6020820190508181035f8301526147978161475e565b9050919050565b7f456d706c6f79657220616c7265616479207265676973746572656400000000005f82015250565b5f6147d2601b8361321d565b91506147dd8261479e565b602082019050919050565b5f6020820190508181035f8301526147ff816147c6565b9050919050565b7f4f6e6c79206a6f6220706f737465722063616e2061737369676e0000000000005f82015250565b5f61483a601a8361321d565b915061484582614806565b602082019050919050565b5f6020820190508181035f8301526148678161482e565b9050919050565b7f4a6f62206e6f7420696e2070656e64696e6720737461746500000000000000005f82015250565b5f6148a260188361321d565b91506148ad8261486e565b602082019050919050565b5f6020820190508181035f8301526148cf81614896565b9050919050565b7f4f6e6c79206f776e65722063616e2072656769737465722061646d696e7300005f82015250565b5f61490a601e8361321d565b9150614915826148d6565b602082019050919050565b5f6020820190508181035f830152614937816148fe565b9050919050565b7f41646d696e20616c7265616479206578697374730000000000000000000000005f82015250565b5f61497260148361321d565b915061497d8261493e565b602082019050919050565b5f6020820190508181035f83015261499f81614966565b9050919050565b7f4f6e6c7920656d706c6f796572206f722061646d696e2063616e20636f6d706c5f8201527f657465206a6f6200000000000000000000000000000000000000000000000000602082015250565b5f614a0060278361321d565b9150614a0b826149a6565b604082019050919050565b5f6020820190508181035f830152614a2d816149f4565b9050919050565b7f4a6f62206e6f742061737369676e6564000000000000000000000000000000005f82015250565b5f614a6860108361321d565b9150614a7382614a34565b602082019050919050565b5f6020820190508181035f830152614a9581614a5c565b9050919050565b5f614aa68261304a565b9150614ab18361304a565b9250828203905081811115614ac957614ac8614598565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f614b068261304a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b3857614b37614598565b5b60018201905091905056fea26469706673582212208bf101d67bbc95d04aaaf9f281f2975347a0ea49b0efb494bc0381319bdb671264736f6c634300081a0033";

    private static String librariesLinkedBinary;

    public static final String FUNC_ADJUSTREPUTATION = "adjustReputation";

    public static final String FUNC_APPLYJOB = "applyJob";

    public static final String FUNC_ASSIGNJOB = "assignJob";

    public static final String FUNC_COMPLETEJOB = "completeJob";

    public static final String FUNC_PAYSALARY = "paySalary";

    public static final String FUNC_POSTJOB = "postJob";

    public static final String FUNC_REGISTERADMIN = "registerAdmin";

    public static final String FUNC_REGISTEREMPLOYER = "registerEmployer";

    public static final String FUNC_REGISTERSTUDENT = "registerStudent";

    public static final String FUNC_ADMINLIST = "adminList";

    public static final String FUNC_ADMINS = "admins";

    public static final String FUNC_EMPLOYERLIST = "employerList";

    public static final String FUNC_EMPLOYERS = "employers";

    public static final String FUNC_GETALLADMINS = "getAllAdmins";

    public static final String FUNC_GETALLEMPLOYERS = "getAllEmployers";

    public static final String FUNC_GETALLJOBS = "getAllJobs";

    public static final String FUNC_GETALLSTUDENTS = "getAllStudents";

    public static final String FUNC_GETJOBAPPLICANTS = "getJobApplicants";

    public static final String FUNC_GETJOBSELECTEDSTUDENTS = "getJobSelectedStudents";

    public static final String FUNC_GETSTUDENTCURRENTJOBS = "getStudentCurrentJobs";

    public static final String FUNC_JOBCOUNTER = "jobCounter";

    public static final String FUNC_JOBLIST = "jobList";

    public static final String FUNC_JOBS = "jobs";

    public static final String FUNC_OWNER = "owner";

    public static final String FUNC_STUDENTLIST = "studentList";

    public static final String FUNC_STUDENTS = "students";

    @Deprecated
    protected Qingongjianxue(String contractAddress, Web3j web3j, Credentials credentials,
            BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected Qingongjianxue(String contractAddress, Web3j web3j, Credentials credentials,
            ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, credentials, contractGasProvider);
    }

    @Deprecated
    protected Qingongjianxue(String contractAddress, Web3j web3j,
            TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected Qingongjianxue(String contractAddress, Web3j web3j,
            TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public RemoteFunctionCall<TransactionReceipt> adjustReputation(String _employerAddress,
            BigInteger _newReputation) {
        final Function function = new Function(
                FUNC_ADJUSTREPUTATION, 
                Arrays.<Type>asList(new Address(160, _employerAddress),
                new Uint8(_newReputation)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> applyJob(BigInteger _jobId) {
        final Function function = new Function(
                FUNC_APPLYJOB, 
                Arrays.<Type>asList(new Uint256(_jobId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> assignJob(BigInteger _jobId,
            List<String> _studentAddresses) {
        final Function function = new Function(
                FUNC_ASSIGNJOB, 
                Arrays.<Type>asList(new Uint256(_jobId),
                new DynamicArray<Address>(
                        Address.class,
                        org.web3j.abi.Utils.typeMap(_studentAddresses, Address.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> completeJob(BigInteger _jobId) {
        final Function function = new Function(
                FUNC_COMPLETEJOB, 
                Arrays.<Type>asList(new Uint256(_jobId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> paySalary(BigInteger _jobId,
            BigInteger weiValue) {
        final Function function = new Function(
                FUNC_PAYSALARY, 
                Arrays.<Type>asList(new Uint256(_jobId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function, weiValue);
    }

    public RemoteFunctionCall<TransactionReceipt> postJob(String _title, BigInteger _salary,
            BigInteger _duration) {
        final Function function = new Function(
                FUNC_POSTJOB, 
                Arrays.<Type>asList(new Utf8String(_title),
                new Uint256(_salary),
                new Uint256(_duration)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> registerAdmin(String _adminAddress,
            BigInteger _permissionLevel) {
        final Function function = new Function(
                FUNC_REGISTERADMIN, 
                Arrays.<Type>asList(new Address(160, _adminAddress),
                new Uint8(_permissionLevel)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> registerEmployer(String _name) {
        final Function function = new Function(
                FUNC_REGISTEREMPLOYER, 
                Arrays.<Type>asList(new Utf8String(_name)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> registerStudent(String _name,
            BigInteger _studentId) {
        final Function function = new Function(
                FUNC_REGISTERSTUDENT, 
                Arrays.<Type>asList(new Utf8String(_name),
                new Uint256(_studentId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<Tuple2<String, BigInteger>> adminList(BigInteger param0) {
        final Function function = new Function(FUNC_ADMINLIST, 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint8>() {}));
        return new RemoteFunctionCall<Tuple2<String, BigInteger>>(function,
                new Callable<Tuple2<String, BigInteger>>() {
                    @Override
                    public Tuple2<String, BigInteger> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple2<String, BigInteger>(
                                (String) results.get(0).getValue(), 
                                (BigInteger) results.get(1).getValue());
                    }
                });
    }

    public RemoteFunctionCall<Tuple2<String, BigInteger>> admins(String param0) {
        final Function function = new Function(FUNC_ADMINS, 
                Arrays.<Type>asList(new Address(160, param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint8>() {}));
        return new RemoteFunctionCall<Tuple2<String, BigInteger>>(function,
                new Callable<Tuple2<String, BigInteger>>() {
                    @Override
                    public Tuple2<String, BigInteger> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple2<String, BigInteger>(
                                (String) results.get(0).getValue(), 
                                (BigInteger) results.get(1).getValue());
                    }
                });
    }

    public RemoteFunctionCall<Tuple5<String, String, BigInteger, BigInteger, Boolean>> employerList(
            BigInteger param0) {
        final Function function = new Function(FUNC_EMPLOYERLIST, 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bool>() {}));
        return new RemoteFunctionCall<Tuple5<String, String, BigInteger, BigInteger, Boolean>>(function,
                new Callable<Tuple5<String, String, BigInteger, BigInteger, Boolean>>() {
                    @Override
                    public Tuple5<String, String, BigInteger, BigInteger, Boolean> call() throws
                            Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple5<String, String, BigInteger, BigInteger, Boolean>(
                                (String) results.get(0).getValue(), 
                                (String) results.get(1).getValue(), 
                                (BigInteger) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (Boolean) results.get(4).getValue());
                    }
                });
    }

    public RemoteFunctionCall<Tuple5<String, String, BigInteger, BigInteger, Boolean>> employers(
            String param0) {
        final Function function = new Function(FUNC_EMPLOYERS, 
                Arrays.<Type>asList(new Address(160, param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bool>() {}));
        return new RemoteFunctionCall<Tuple5<String, String, BigInteger, BigInteger, Boolean>>(function,
                new Callable<Tuple5<String, String, BigInteger, BigInteger, Boolean>>() {
                    @Override
                    public Tuple5<String, String, BigInteger, BigInteger, Boolean> call() throws
                            Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple5<String, String, BigInteger, BigInteger, Boolean>(
                                (String) results.get(0).getValue(), 
                                (String) results.get(1).getValue(), 
                                (BigInteger) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (Boolean) results.get(4).getValue());
                    }
                });
    }

    public RemoteFunctionCall<List> getAllAdmins() {
        final Function function = new Function(FUNC_GETALLADMINS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Admin>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<List> getAllEmployers() {
        final Function function = new Function(FUNC_GETALLEMPLOYERS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Employer>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<List> getAllJobs() {
        final Function function = new Function(FUNC_GETALLJOBS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Job>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<List> getAllStudents() {
        final Function function = new Function(FUNC_GETALLSTUDENTS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Student>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<List> getJobApplicants(BigInteger _jobId) {
        final Function function = new Function(FUNC_GETJOBAPPLICANTS, 
                Arrays.<Type>asList(new Uint256(_jobId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<List> getJobSelectedStudents(BigInteger _jobId) {
        final Function function = new Function(FUNC_GETJOBSELECTEDSTUDENTS, 
                Arrays.<Type>asList(new Uint256(_jobId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<List> getStudentCurrentJobs(String _studentAddress) {
        final Function function = new Function(FUNC_GETSTUDENTCURRENTJOBS, 
                Arrays.<Type>asList(new Address(160, _studentAddress)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<BigInteger> jobCounter() {
        final Function function = new Function(FUNC_JOBCOUNTER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger>> jobList(
            BigInteger param0) {
        final Function function = new Function(FUNC_JOBLIST, 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint8>() {}));
        return new RemoteFunctionCall<Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger>>(function,
                new Callable<Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger>>() {
                    @Override
                    public Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger> call(
                            ) throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger>(
                                (BigInteger) results.get(0).getValue(), 
                                (String) results.get(1).getValue(), 
                                (String) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (BigInteger) results.get(4).getValue(), 
                                (BigInteger) results.get(5).getValue());
                    }
                });
    }

    public RemoteFunctionCall<Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger>> jobs(
            BigInteger param0) {
        final Function function = new Function(FUNC_JOBS, 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint8>() {}));
        return new RemoteFunctionCall<Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger>>(function,
                new Callable<Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger>>() {
                    @Override
                    public Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger> call(
                            ) throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple6<BigInteger, String, String, BigInteger, BigInteger, BigInteger>(
                                (BigInteger) results.get(0).getValue(), 
                                (String) results.get(1).getValue(), 
                                (String) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (BigInteger) results.get(4).getValue(), 
                                (BigInteger) results.get(5).getValue());
                    }
                });
    }

    public RemoteFunctionCall<String> owner() {
        final Function function = new Function(FUNC_OWNER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<Tuple5<String, String, BigInteger, Boolean, BigInteger>> studentList(
            BigInteger param0) {
        final Function function = new Function(FUNC_STUDENTLIST, 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bool>() {}, new TypeReference<Uint256>() {}));
        return new RemoteFunctionCall<Tuple5<String, String, BigInteger, Boolean, BigInteger>>(function,
                new Callable<Tuple5<String, String, BigInteger, Boolean, BigInteger>>() {
                    @Override
                    public Tuple5<String, String, BigInteger, Boolean, BigInteger> call() throws
                            Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple5<String, String, BigInteger, Boolean, BigInteger>(
                                (String) results.get(0).getValue(), 
                                (String) results.get(1).getValue(), 
                                (BigInteger) results.get(2).getValue(), 
                                (Boolean) results.get(3).getValue(), 
                                (BigInteger) results.get(4).getValue());
                    }
                });
    }

    public RemoteFunctionCall<Tuple5<String, String, BigInteger, Boolean, BigInteger>> students(
            String param0) {
        final Function function = new Function(FUNC_STUDENTS, 
                Arrays.<Type>asList(new Address(160, param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bool>() {}, new TypeReference<Uint256>() {}));
        return new RemoteFunctionCall<Tuple5<String, String, BigInteger, Boolean, BigInteger>>(function,
                new Callable<Tuple5<String, String, BigInteger, Boolean, BigInteger>>() {
                    @Override
                    public Tuple5<String, String, BigInteger, Boolean, BigInteger> call() throws
                            Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple5<String, String, BigInteger, Boolean, BigInteger>(
                                (String) results.get(0).getValue(), 
                                (String) results.get(1).getValue(), 
                                (BigInteger) results.get(2).getValue(), 
                                (Boolean) results.get(3).getValue(), 
                                (BigInteger) results.get(4).getValue());
                    }
                });
    }

    @Deprecated
    public static Qingongjianxue load(String contractAddress, Web3j web3j, Credentials credentials,
            BigInteger gasPrice, BigInteger gasLimit) {
        return new Qingongjianxue(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    @Deprecated
    public static Qingongjianxue load(String contractAddress, Web3j web3j,
            TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new Qingongjianxue(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public static Qingongjianxue load(String contractAddress, Web3j web3j, Credentials credentials,
            ContractGasProvider contractGasProvider) {
        return new Qingongjianxue(contractAddress, web3j, credentials, contractGasProvider);
    }

    public static Qingongjianxue load(String contractAddress, Web3j web3j,
            TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return new Qingongjianxue(contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static RemoteCall<Qingongjianxue> deploy(Web3j web3j, Credentials credentials,
            ContractGasProvider contractGasProvider) {
        return deployRemoteCall(Qingongjianxue.class, web3j, credentials, contractGasProvider, getDeploymentBinary(), "");
    }

    public static RemoteCall<Qingongjianxue> deploy(Web3j web3j,
            TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return deployRemoteCall(Qingongjianxue.class, web3j, transactionManager, contractGasProvider, getDeploymentBinary(), "");
    }

    @Deprecated
    public static RemoteCall<Qingongjianxue> deploy(Web3j web3j, Credentials credentials,
            BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(Qingongjianxue.class, web3j, credentials, gasPrice, gasLimit, getDeploymentBinary(), "");
    }

    @Deprecated
    public static RemoteCall<Qingongjianxue> deploy(Web3j web3j,
            TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(Qingongjianxue.class, web3j, transactionManager, gasPrice, gasLimit, getDeploymentBinary(), "");
    }

    public static void linkLibraries(List<LinkReference> references) {
        librariesLinkedBinary = linkBinaryWithReferences(BINARY, references);
    }

    private static String getDeploymentBinary() {
        if (librariesLinkedBinary != null) {
            return librariesLinkedBinary;
        } else {
            return BINARY;
        }
    }

    public static class Admin extends StaticStruct {
        public String adminAddress;

        public BigInteger permissionLevel;

        public Admin(String adminAddress, BigInteger permissionLevel) {
            super(new Address(160, adminAddress),
                    new Uint8(permissionLevel));
            this.adminAddress = adminAddress;
            this.permissionLevel = permissionLevel;
        }

        public Admin(Address adminAddress, Uint8 permissionLevel) {
            super(adminAddress, permissionLevel);
            this.adminAddress = adminAddress.getValue();
            this.permissionLevel = permissionLevel.getValue();
        }
    }

    public static class Employer extends DynamicStruct {
        public String employerAddress;

        public String name;

        public BigInteger reputation;

        public BigInteger postedJobsCount;

        public Boolean isRegistered;

        public Employer(String employerAddress, String name, BigInteger reputation,
                BigInteger postedJobsCount, Boolean isRegistered) {
            super(new Address(160, employerAddress),
                    new Utf8String(name),
                    new Uint8(reputation),
                    new Uint256(postedJobsCount),
                    new Bool(isRegistered));
            this.employerAddress = employerAddress;
            this.name = name;
            this.reputation = reputation;
            this.postedJobsCount = postedJobsCount;
            this.isRegistered = isRegistered;
        }

        public Employer(Address employerAddress, Utf8String name, Uint8 reputation,
                Uint256 postedJobsCount, Bool isRegistered) {
            super(employerAddress, name, reputation, postedJobsCount, isRegistered);
            this.employerAddress = employerAddress.getValue();
            this.name = name.getValue();
            this.reputation = reputation.getValue();
            this.postedJobsCount = postedJobsCount.getValue();
            this.isRegistered = isRegistered.getValue();
        }
    }

    public static class Job extends DynamicStruct {
        public BigInteger jobId;

        public String title;

        public String employerAddress;

        public BigInteger salary;

        public BigInteger duration;

        public BigInteger status;

        public List<String> applicants;

        public List<String> selectedStudents;

        public Job(BigInteger jobId, String title, String employerAddress, BigInteger salary,
                BigInteger duration, BigInteger status, List<String> applicants,
                List<String> selectedStudents) {
            super(new Uint256(jobId),
                    new Utf8String(title),
                    new Address(160, employerAddress),
                    new Uint256(salary),
                    new Uint256(duration),
                    new Uint8(status),
                    new DynamicArray<Address>(
                            Address.class,
                            org.web3j.abi.Utils.typeMap(applicants, Address.class)),
                    new DynamicArray<Address>(
                            Address.class,
                            org.web3j.abi.Utils.typeMap(selectedStudents, Address.class)));
            this.jobId = jobId;
            this.title = title;
            this.employerAddress = employerAddress;
            this.salary = salary;
            this.duration = duration;
            this.status = status;
            this.applicants = applicants;
            this.selectedStudents = selectedStudents;
        }

        public Job(Uint256 jobId, Utf8String title, Address employerAddress, Uint256 salary,
                Uint256 duration, Uint8 status,
                @Parameterized(type = Address.class) DynamicArray<Address> applicants,
                @Parameterized(type = Address.class) DynamicArray<Address> selectedStudents) {
            super(jobId, title, employerAddress, salary, duration, status, applicants, selectedStudents);
            this.jobId = jobId.getValue();
            this.title = title.getValue();
            this.employerAddress = employerAddress.getValue();
            this.salary = salary.getValue();
            this.duration = duration.getValue();
            this.status = status.getValue();
            this.applicants = applicants.getValue().stream().map(v -> v.getValue()).collect(Collectors.toList());
            this.selectedStudents = selectedStudents.getValue().stream().map(v -> v.getValue()).collect(Collectors.toList());
        }
    }

    public static class Student extends DynamicStruct {
        public String studentAddress;

        public String name;

        public BigInteger studentId;

        public Boolean isRegistered;

        public BigInteger totalEarnings;

        public List<BigInteger> currentJobIds;

        public Student(String studentAddress, String name, BigInteger studentId,
                Boolean isRegistered, BigInteger totalEarnings, List<BigInteger> currentJobIds) {
            super(new Address(160, studentAddress),
                    new Utf8String(name),
                    new Uint256(studentId),
                    new Bool(isRegistered),
                    new Uint256(totalEarnings),
                    new DynamicArray<Uint256>(
                            Uint256.class,
                            org.web3j.abi.Utils.typeMap(currentJobIds, Uint256.class)));
            this.studentAddress = studentAddress;
            this.name = name;
            this.studentId = studentId;
            this.isRegistered = isRegistered;
            this.totalEarnings = totalEarnings;
            this.currentJobIds = currentJobIds;
        }

        public Student(Address studentAddress, Utf8String name, Uint256 studentId,
                Bool isRegistered, Uint256 totalEarnings,
                @Parameterized(type = Uint256.class) DynamicArray<Uint256> currentJobIds) {
            super(studentAddress, name, studentId, isRegistered, totalEarnings, currentJobIds);
            this.studentAddress = studentAddress.getValue();
            this.name = name.getValue();
            this.studentId = studentId.getValue();
            this.isRegistered = isRegistered.getValue();
            this.totalEarnings = totalEarnings.getValue();
            this.currentJobIds = currentJobIds.getValue().stream().map(v -> v.getValue()).collect(Collectors.toList());
        }
    }
}
